//  登录 模块
import { Module } from "vuex";
// 根类型
import { RootState } from "../index";
// 登录api
import { login, loginByToken } from '@/api/ApiPath'
import { ElMessage, ElLoading } from "element-plus";
import router from "@/router";
import { store } from '@/store'
import { UserType } from '../type'
// 初始化类型
export interface AuthState {
    token: string,
    userInfo: object,
    roles: string[]
}

export const authState: Module<AuthState, RootState> = {
    // 命名不冲突
    namespaced: true,
    // 属性
    state: (): AuthState => ({
        token: '',
        userInfo: {
            avatar: '',
            username: '',
            roleName: '',
            status: 1,
        },
        roles: []
    }),
    // 操作 state 值
    mutations: {
        // 添加token
        addToken(state: AuthState, token: string) {
            state.token = token
        },
        addUserInfo(state: AuthState, userinfo: UserType) {
            state.userInfo = userinfo
        }
    },

    // 计算属性
    getters: {
        getToken(state: AuthState) {
            return state.token
        },
    },
    actions: {
        // 事件
        // 使用账号密码登录
        // commit  是用来调用 上面 mutations 里面的方法
        login({ commit, state, dispatch }, requestUser) {
            // 登录 接口
            login(requestUser).then(res => {
                if (res.code === 200) {
                    // 存储用户信息
                    state.userInfo = res.data
                    commit("addToken", res.data.token)
                    localStorage.setItem('token', res.data.token)
                    // 传入 用户所有权限菜单路径
                    store.dispatch('menuState/generateSysmenuList', res.data.permissions)
                    // 传入 用户权限按钮
                    store.dispatch('buttonState/generateButtons', res.data.permissions)
                    setTimeout(() => {
                        router.push({ path: '/' })
                        ElMessage({
                            message: '登录成功~',
                            type: 'success',
                        })
                    }, 500)
                } else {
                }

            })
        },
        // 使用token登录
        loginByToken({ commit, state, dispatch }, token) {
            commit("addToken", token)
            loginByToken(token).then(res => {
                state.userInfo = res.data
                localStorage.setItem('token', res.data.token)
                // 传入 用户所有权限菜单路径
                store.dispatch('menuState/generateSysmenuList', res.data.permissions)
                // 传入 用户权限按钮
                store.dispatch('buttonState/generateButtons', res.data.permissions)
            }).catch(() => {
                localStorage.removeItem('token')
            })
        }
    }
}
